package extenstion

/**
 * 为什么Any的toString 可以通过扩展重写？
 * 其实扩展并没有重写toString方法，只是当调用对象为null时，才会调用扩展方法，
 * 不为空时还是会调用成员方法
 *
 * 自己写的一个类为什么就不可以？
 * 已实现，原理参照上述所说
 */
class TestMc {
    fun foo() = "Member"
}

/**
 * 扩展空接口者
 */
fun TestMc?.foo(): String {

    if (this == null) {
        return "null"
    }

    return toString()
}

fun main(args: Array<String>) {
    var mc: TestMc? = null
    println(mc.foo())

    mc = TestMc()
    println(mc.foo())
}
